package com.nifostasky.main.thread.bashfunction;

import lombok.SneakyThrows;

/**
 * Thread类的常用方法
 */
public class ThreadBash {
    public static void main(String[] args) throws InterruptedException {

        System.out.println("============================================================================================================");

        //获取当前线程对象
        Thread mainThread = Thread.currentThread();
        //执行线程 start
        new Thread(){
            @Override
            public void run() {
                //判断当前线程是否存活 true表示存活 ; false 表示死亡
                System.out.println("isAlive(): "+ mainThread.isAlive());
                //main线程执行完毕才执行test线程
                try {
                    mainThread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //判断当前线程是否存活 true表示存活 ; false 表示死亡
                System.out.println("isAlive(): "+ mainThread.isAlive());

                System.out.println("start(): 测试线程, 等待main线程执行完毕开始执行");

                //等待1s
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("睡眠1秒");
                System.out.println("==========================================test线程死亡==================================================================");

            }
        }.start();


        //设置当前线程的名字
        mainThread.setName("main主线程");

        //获取当前线程的名字
        System.out.println("getName(): "+ mainThread.getName());


        //释放当前CPU的执行权,因为当前线程没有人任何其他线程来进行抢占,所以最终还是会被main线程抢占到;相当于这条语句再这里没用
        mainThread.yield();

        //等待1s
        Thread.sleep(1000);

        System.out.println("==========================================main线程死亡==================================================================");


        //杀死main进程,过时了,别用
//        mainThread.stop();

//        System.out.println("================================main进程被杀死,这条语句将不会被执行============================================================================");

    }

}
/**
- start() : 启动当前线程, 调用当前线程的run()方法
- run() : 通常需要重写Thread类中的此方法, 将创建的线程要执行的操作声明在此方法中
- currentThread() : 静态方法, 返回当前代码执行的线程
- getName() : 获取当前线程的名字
- setName() : 设置当前线程的名字
- yield() : 释放当前CPU的执行权
- join() : 在线程a中调用线程b的join(), 此时线程a进入阻塞状态, 知道线程b完全执行完以后, 线程a才结束阻塞状态
- stop() : 已过时. 当执行此方法时,强制结束当前线程.
- sleep(long militime) : 让线程睡眠指定的毫秒数，在指定时间内，线程是阻塞状态
- isAlive() ：判断当前线程是否存活
 */
